Add an api to get the vertex data for a render pass
authorMatthias Clasen <mclasen@redhat.com>
Thu, 28 Sep 2017 00:55:14 +0000 (20:55 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 28 Sep 2017 12:39:22 +0000 (08:39 -0400)
gsk/gskprivate.h
gsk/gskvulkanrenderpass.c
gsk/gskvulkanrenderpassprivate.h
gsk/gskvulkanrenderprivate.h

index 8584be6960b3499100b664a75a7ee473cc27b2d5..5d9f88c942dce693c20e414a7f74176fae6f5a12 100644 (file)
@@ -10,6 +10,9 @@ void gsk_ensure_resources (void);
 
 int pango_glyph_string_num_glyphs (PangoGlyphString *glyphs);
 
+typedef struct _GskVulkanRender GskVulkanRender;
+typedef struct _GskVulkanRenderPass GskVulkanRenderPass;
+
 G_END_DECLS
 
 #endif /* __GSK_PRIVATE_H__ */
index 3cb7e6603d0a4a4770a94ca32b5ce0115fe9f4c1..022c08d74e84eba82433714ac29280aebcead499 100644 (file)
@@ -1124,6 +1124,25 @@ gsk_vulkan_render_pass_collect_vertex_data (GskVulkanRenderPass *self,
   return n_bytes;
 }
 
+GskVulkanBuffer *
+gsk_vulkan_render_pass_get_vertex_data (GskVulkanRenderPass *self,
+                                        GskVulkanRender     *render)
+{
+  gsize n_bytes;
+  GskVulkanBuffer *buffer;
+  guchar *data;
+
+  n_bytes = gsk_vulkan_render_pass_count_vertex_data (self);
+  buffer = gsk_vulkan_buffer_new (self->vulkan, n_bytes);
+  data = gsk_vulkan_buffer_map (buffer);
+
+  gsk_vulkan_render_pass_collect_vertex_data (self, render, data, 0, n_bytes);
+
+  gsk_vulkan_buffer_unmap (buffer);
+
+  return buffer;
+}
+
 void
 gsk_vulkan_render_pass_reserve_descriptor_sets (GskVulkanRenderPass *self,
                                                 GskVulkanRender     *render)
index 56bc9ad587a3af85d71033b2fc1cbbf35be5c670..808ea880e147f9872e44a8816072bdec834ec50c 100644 (file)
@@ -6,10 +6,10 @@
 
 #include "gsk/gskvulkanbufferprivate.h"
 #include "gsk/gskvulkanrenderprivate.h"
+#include "gsk/gskprivate.h"
 
 G_BEGIN_DECLS
 
-typedef struct _GskVulkanRenderPass GskVulkanRenderPass;
 
 GskVulkanRenderPass *   gsk_vulkan_render_pass_new                      (GdkVulkanContext       *context);
 void                    gsk_vulkan_render_pass_free                     (GskVulkanRenderPass    *self);
@@ -30,6 +30,8 @@ gsize                   gsk_vulkan_render_pass_collect_vertex_data      (GskVulk
                                                                          guchar                 *data,
                                                                          gsize                   offset,
                                                                          gsize                   total);
+GskVulkanBuffer *       gsk_vulkan_render_pass_get_vertex_data          (GskVulkanRenderPass    *self,
+                                                                         GskVulkanRender        *render);
 
 void                    gsk_vulkan_render_pass_reserve_descriptor_sets  (GskVulkanRenderPass    *self,
                                                                          GskVulkanRender        *render);
index ed35019c3f7080456c837c024b4ef58526105206..4bd2484d8164b78e18b2572d07e53e8506d07c9d 100644 (file)
@@ -6,6 +6,8 @@
 
 #include "gsk/gskvulkanimageprivate.h"
 #include "gsk/gskvulkanpipelineprivate.h"
+#include "gsk/gskvulkanrenderpassprivate.h"
+#include "gsk/gskprivate.h"
 
 G_BEGIN_DECLS
 
@@ -50,8 +52,6 @@ typedef enum {
   GSK_VULKAN_N_PIPELINES
 } GskVulkanPipelineType;
 
-typedef struct _GskVulkanRender GskVulkanRender;
-
 GskVulkanRender *       gsk_vulkan_render_new                           (GskRenderer            *renderer,
                                                                          GdkVulkanContext       *context);
 void                    gsk_vulkan_render_free                          (GskVulkanRender        *self);